fix windows build and clarify comment
authorJoey Hess <joeyh@joeyh.name>
Wed, 29 Jan 2025 18:52:20 +0000 (14:52 -0400)
committerJoey Hess <joeyh@joeyh.name>
Wed, 29 Jan 2025 18:52:20 +0000 (14:52 -0400)
Utility/OsPath.hs

index 0af093da92b0ceeb0c00df13b1de7bdf5b1edc46..c2388ed940d73d34a2f2d1fe57273aee25e4580a 100644 (file)
@@ -53,36 +53,39 @@ instance OsPathConv FilePath where
 
 #ifdef WITH_OSPATH
 instance OsPathConv RawFilePath where
-       toOsPath = bytesToOsPath . S.toShort
 #if defined(mingw32_HOST_OS)
+       toOsPath = bytesToOsPath
        fromOsPath = bytesFromOsPath
 #else
+       toOsPath = bytesToOsPath . S.toShort
        fromOsPath = S.fromShort . bytesFromOsPath
 #endif
 
 instance OsPathConv ShortByteString where
-       toOsPath = bytesToOsPath
 #if defined(mingw32_HOST_OS)
+       toOsPath = bytesToOsPath . S.fromShort
        fromOsPath = S.toShort . bytesFromOsPath
 #else
+       toOsPath = bytesToOsPath
        fromOsPath = bytesFromOsPath
 #endif
 
-bytesToOsPath :: ShortByteString -> OsPath
 #if defined(mingw32_HOST_OS)
 -- On Windows, OsString contains a ShortByteString that is
--- utf-16 encoded. So have to convert the input to that.
--- This is relatively expensive.
+-- utf-16 encoded. But the input RawFilePath is assumed to
+-- be utf-8. So this is a relatively  expensive conversion.
+bytesToOsPath :: RawFilePath -> OsPath
 bytesToOsPath = unsafePerformIO . encodeFS . fromRawFilePath
 #else
+bytesToOsPath :: ShortByteString -> OsPath
 bytesToOsPath = OsString . PosixString
 #endif
 
 #if defined(mingw32_HOST_OS)
 bytesFromOsPath :: OsPath -> RawFilePath
 -- On Windows, OsString contains a ShortByteString that is
--- utf-16 encoded. So have to convert the input from that.
--- This is relatively expensive.
+-- utf-16 encoded, but RawFilePath is utf-8.
+-- So this is relatively expensive conversion.
 bytesFromOsPath = toRawFilePath . cWcharsToChars_UCS2 . BS16.unpack . getWindowsString
 #else
 bytesFromOsPath :: OsPath -> ShortByteString